/*
 * This code implements the MD5 message-digest algorithm(RFC1321), 
 * which is due to Ron Rivest. This code was written by Colin Plumb
 * in 1993, no copyright is claimed. This code is in the public domain;
 * do with it what you wish.
 * Equivalent code is available from RSA Data Security, Inc.
 * This code has been tested against that, and is equivalent,
 * except that you don't need to include two pages of legalese
 * with every copy.
 * To compute the message digest of a chunk of bytes, declare an
 * MD5Context structure, pass it to MD5Init, call MD5Update as
 * needed on buffers full of bytes, and then call MD5Final, which
 * will fill a supplied 16-byte array with the digest.
 */

#ifndef __MD5__
#define __MD5__
// std=c99 / std=gnu99
#include <stdint.h>

#define MD5_DIGEST_SIZE 16

struct MD5Context 
{
	uint32_t digest[4];	// 16-byte digest
	uint32_t low, high;	// total message length in bit count
	uint8_t buffer[64];	// 64-byte message buffer
};

void MD5Init(struct MD5Context *ctx);
void MD5Update(struct MD5Context *ctx, const void *data, unsigned int len);
void MD5Final(unsigned char digest[16], struct MD5Context *ctx);
void MD5HexString(char hex[33], const unsigned char digest[16]);

#endif
